import Db2Formatter from "./languages/Db2Formatter";
import N1qlFormatter from "./languages/N1qlFormatter";
import PlSqlFormatter from "./languages/PlSqlFormatter";
import StandardSqlFormatter from "./languages/StandardSqlFormatter";

export default {
  /**
   * Format whitespaces in a query to make it easier to read.
   *
   * @param {String} query
   * @param {Object} cfg
   *  @param {String} cfg.language Query language, default is Standard SQL
   *  @param {String} cfg.indent Characters used for indentation, default is "  " (2 spaces)
   *  @param {Object} cfg.params Collection of params for placeholder replacement
   * @return {String}
   */
  format: (query, cfg) => {
    cfg = cfg || {};

    switch (cfg.language) {
      case "db2":
        return new Db2Formatter(cfg).format(query);
      case "n1ql":
        return new N1qlFormatter(cfg).format(query);
      case "pl/sql":
        return new PlSqlFormatter(cfg).format(query);
      case "sql":
      case undefined:
        return new StandardSqlFormatter(cfg).format(query);
      default:
        throw Error(`Unsupported SQL dialect: ${cfg.language}`);
    }
  }
};
